From: Carlos Garnacho Date: Thu, 14 Apr 2022 19:09:27 +0000 (+0200) Subject: keyboard: Add generic handling for key actions X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~461^2^2~26 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=5d0c49f0e0eaffb92fc914701f967592147f5718;p=gnome-shell.git keyboard: Add generic handling for key actions These actions are defined in the JSON files themselves, allowing us to migrate away from the sets of pre/post default keys, and fold them into the JSON files for fuller control on layout and appearance. As a first migration step, handle the relevant actions in the buttons created from the JSON files, so we can port these. Part-of: --- diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index 44426b225..3d9c0b392 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -1548,6 +1548,33 @@ var Keyboard = GObject.registerClass({ if (!this._latched) this._setActiveLayer(0); }); + if (key.action !== null) { + button.connect('pressed', () => { + if (key.action === 'levelSwitch') { + this._setActiveLayer(key.level); + this._setLatched ( + key.level === 1 && + key.iconName === 'keyboard-caps-lock-symbolic'); + } + }); + button.connect('released', () => { + if (key.action === 'hide') + this.close(); + else if (key.action === 'languageMenu') + this._popupLanguageMenu(button); + else if (key.action === 'emoji') + this._toggleEmoji(); + }); + } + + if (key.action === 'levelSwitch' && + key.iconName === 'keyboard-shift-symbolic') { + layout.shiftKeys.push(button); + if (key.level === 1) { + button.connect('long-press', + () => this._setLatched(true)); + } + } if (key.action || key.keyval) button.keyButton.add_style_class_name('default-key'); @@ -1556,6 +1583,11 @@ var Keyboard = GObject.registerClass({ } } + _setLatched(latched) { + this._latched = latched; + this._setCurrentLevelLatched(this._currentPage, this._latched); + } + _popupLanguageMenu(keyActor) { if (this._languagePopup) this._languagePopup.destroy();